// 放置所有和权限相关的文件代码
// 从零开始实现

import { asyncRoutes } from '@/router/index'
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式

// 根据token判断路由跳转
// 1.引入router实例对象
import router from '@/router'
import store from '@/store'
// 声明白名单
const whiteList = ['/login', '/404']
// 2.使用前置守卫
router.beforeEach(async(to, from, next) => {
  // 打开进度条
  NProgress.start()
  // to: 目标路由对象(去哪里)
  // from: 来源路由对象(从哪里来)
  // next: 可执行的放行方法
  // 拿到token做判断
  if (store.getters.token) {
    // 如果当前有token 且去往登陆 强制跳回首页
    if (to.path === '/login') {
      next('/')
    } else {
      // 有token但是不是去登录页 直接放行

      // 这个位置就是我们要寻找的位置  在这个地方我需要调用action函数
      // 并且需要保证 数据拿回来之后 才执行放行操作

      // 优化：如果当前vuex中已经存好了用户数据 就不要再次重复发送接口请求了

      if (!store.getters.userId) {
        const res = await store.dispatch('user/asyncSetUserInfo')
        // 获取权限数据menus,前端存储的所有路由表asyncRoutes
        const menus = res.data.roles.menus
        const filterRoutes = asyncRoutes.filter(route => {
          return menus.includes(route.children[0].name)
        })
        console.log('过滤后的', filterRoutes)
      }

      next()
    }
  } else {
    // 在白名单内
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 不再白名单内
      next('/login')
    }
  }
  // 结束进度条
  NProgress.done()
})

